﻿// ***********************************************************************
// Assembly         : AccesoDatos
// Author           : Diego
// Created          : 03-02-2014
//
// Last Modified By : Diego
// Last Modified On : 03-02-2014
// ***********************************************************************
// <copyright file="AD_Clientes.cs" company="">
//     Copyright (c) . All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Modelado.Modulos.ClasesModelado;
using System.Data.SqlClient;
using System.Data;

/// <summary>
/// The ClasesAccesoDatos namespace.
/// </summary>
namespace AccesoDatos.Modulos.ClasesAccesoDatos
{
    /// <summary>
    /// Class AD_Clientes.
    /// </summary>
       public class AD_Clientes
        {


            /*
            
                *  Título: CRE_Cliente
                *  Tipo: Método
                *  Variables: 
             
                CLI_nombre
                CLI_descripcion
                CLI_telefono
                CLI_direccion
                CLI_email
                CLI_NIT
                CLI_codtipocliente
                CLI_estado
             
                *Resumen:  Método recibe informacion del Cliente, hace llamado y ejecucion de Procedimiento Almacenado "SP_CRE_Cliente" en la  Base de Datos, 
                           se inserta cliente en la Base de Datos.
             
                *Retorno: N/A
                *Autor: Sofia Rodriguez
                *Fecha: 13/07/13
                    
           
                  */

            /// <summary>
            /// Crs the e_ cliente.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <param name="obj">The object.</param>
            public void CRE_Cliente(SqlCommand comando, MOD_Clientes obj)
           {
               try
               {
                   string sp = "SP_CRE_Cliente";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();


                   comando.Parameters.Add(new SqlParameter("@CLI_nombre", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_descripcion", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_telefono", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_direccion", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_email", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_NIT", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_codtipocliente", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_CODESTADO", SqlDbType.Int));


                   comando.Parameters[0].Value = obj.CLI_nombre;
                   comando.Parameters[1].Value = obj.CLI_descripcion;
                   comando.Parameters[2].Value = obj.CLI_telefono;
                   comando.Parameters[3].Value = obj.CLI_direccion;
                   comando.Parameters[4].Value = obj.CLI_email;
                   comando.Parameters[5].Value = obj.CLI_NIT;
                   comando.Parameters[6].Value = obj.CLI_codtipocliente;
                   comando.Parameters[7].Value = obj.CLI_estado;


                   comando.ExecuteNonQuery();


               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }



           
            /*
            
           *  Título: DEL_cliente
           *  Variables: 
             
            CLI_codcliente
             
           *Resumen:  Método recibe código del Cliente, hace llamado y ejecucion de Procedimiento Almacenado "SP_DEL_cliente" en la  Base de Datos, 
                      se elimina  cliente que el usuario haya seleccionado en la interfaz gráfica.
             
           *Retorno: N/A
           *Autor: Sofia Rodriguez
           *Fecha: 13/07/13
                    
           
             */

            /// <summary>
            /// Des the l_cliente.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <param name="codigo">The codigo.</param>
            public void DEL_cliente(SqlCommand comando, int codigo)
           {
               try
               {
                   string sp = "SP_DEL_cliente";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();


                   comando.Parameters.Add(new SqlParameter("@CLI_codcliente", SqlDbType.Int));

                   comando.Parameters[0].Value = codigo;

                   comando.ExecuteNonQuery();


               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }




            /*
            
           *  Título: UPD_Cliente
           *  Tipo: Método
           *  Variables:
             
            CLI_codcliente
             
           *Resumen:  Método recibe código del Cliente, hace llamado y ejecucion de Procedimiento Almacenado "SP_UPD_Cliente" en la  Base de Datos, se actualiza  cliente que el usuario haya seleccionado en la interfaz gráfica.
           *Retorno: N/A
           *Autor: Sofia Rodriguez
           *Fecha: 13/07/13
           
         
           
             */


            /// <summary>
            /// Ups the d_ cliente.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <param name="obj">The object.</param>
            public void UPD_Cliente(SqlCommand comando, MOD_Clientes obj)
           {
               try
               {
                   string sp = "SP_UPD_Cliente";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();

                   comando.Parameters.Add(new SqlParameter("@CLI_CODCLIENTE", SqlDbType.Int));
                   comando.Parameters.Add(new SqlParameter("@CLI_NOMBRE", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_DESCRIPCION", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_TELEFONO", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_DIRECCION", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_EMAIL", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_NIT", SqlDbType.VarChar));
                   comando.Parameters.Add(new SqlParameter("@CLI_CODTIPOCLI", SqlDbType.Int));
                   comando.Parameters.Add(new SqlParameter("@CLI_CODESTADO", SqlDbType.Int));

                   comando.Parameters[0].Value = obj.CLI_codcliente;
                   comando.Parameters[1].Value = obj.CLI_nombre;
                   comando.Parameters[2].Value = obj.CLI_descripcion;
                   comando.Parameters[3].Value = obj.CLI_telefono;
                   comando.Parameters[4].Value = obj.CLI_direccion;
                   comando.Parameters[5].Value = obj.CLI_email;
                   comando.Parameters[6].Value = obj.CLI_NIT;
                   comando.Parameters[7].Value = obj.CLI_codtipocliente;
                   comando.Parameters[8].Value = obj.CLI_estado;

                   comando.ExecuteNonQuery();


               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }


            /*Título: SEL_Grid_Clientes
              Tipo: funcion
              Variables: 
             
              CLI_codcliente
              CLI_nombre
              CLI_telefono
              CLI_nombretipocliente
              CLI_estadonombre
             
              Resumen:Método recibe propiedades del Cliente, hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_Grid_Clientes" en la  Base de Datos, 
              se muestran clientes que existan en  la Base de Datos.
              Retorno: lista en un dataset con datos de clientes
              Autor: Sofia Rodriguez 
              Fecha: 13/07/13*/

            /// <summary>
            /// Ses the l_ grid_ clientes.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <returns>List{MOD_Clientes}.</returns>
            public List<MOD_Clientes> SEL_Grid_Clientes(SqlCommand comando)
           {
               try
               {
                   string sp = "SP_SEL_Grid_Clientes";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();

                   IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                   DataSet ds = new DataSet();
                   da.Fill(ds);

                   DataTable dt = ds.Tables[0];
                   List<MOD_Clientes> lista = new List<MOD_Clientes>();

                   for (int i = 0; i < dt.Rows.Count; i++)
                   {
                       MOD_Clientes obj = new MOD_Clientes();
                       obj.CLI_codcliente = Convert.ToInt32(dt.Rows[i]["CLI_CODCLIENTE"]);
                       obj.CLI_nombre = dt.Rows[i]["CLI_NOMBRE"].ToString();
                       obj.CLI_telefono = dt.Rows[i]["CLI_TELEFONO"].ToString();
                       obj.CLI_nombretipocliente = dt.Rows[i]["TIPCLI_NOMBRE"].ToString();
                       obj.CLI_estadonombre = dt.Rows[i]["ESTCLI_NOMBRE"].ToString();

                       lista.Add(obj);
                   }


                   return lista;

               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }


            /*Título: SEL_ClienteByID
          Tipo: funcion
          Variables: 
             
          CLI_codcliente
                      
          Resumen:funcion que recibe codigo del Cliente, hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_ClienteByID" en la  Base de Datos, 
          se muestra datos del cliente seleccionado en la interfaz gráfica.
          Retorno: objeto con datos del cliente seleccionado.
          Autor: Sofia Rodriguez 
          Fecha: 13/07/13*/
            /// <summary>
            /// Ses the l_ cliente by identifier.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <param name="CLI_CODCLIENTE">The cl i_ codcliente.</param>
            /// <returns>MOD_Clientes.</returns>
            public MOD_Clientes SEL_ClienteByID(SqlCommand comando, int CLI_CODCLIENTE)
           {
               try
               {
                   string sp = "SP_SEL_ClienteByID";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();

                   comando.Parameters.Add(new SqlParameter("@CLI_CODCLIENTE", SqlDbType.Int));


                   comando.Parameters[0].Value = CLI_CODCLIENTE;


                   IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                   DataSet ds = new DataSet();
                   da.Fill(ds);

                   DataTable dt = ds.Tables[0];
                   MOD_Clientes obj = new MOD_Clientes();

                   for (int i = 0; i < dt.Rows.Count; i++)
                   {
                       obj.CLI_codcliente = Convert.ToInt32(dt.Rows[i]["CLI_CODCLIENTE"]);
                       obj.CLI_nombre = dt.Rows[i]["CLI_NOMBRE"].ToString();
                       obj.CLI_descripcion = dt.Rows[i]["CLI_DESCRIPCION"].ToString();
                       obj.CLI_telefono = dt.Rows[i]["CLI_TELEFONO"].ToString();
                       obj.CLI_direccion = dt.Rows[i]["CLI_DIRECCION"].ToString();
                       obj.CLI_email = dt.Rows[i]["CLI_EMAIL"].ToString();
                       obj.CLI_NIT = dt.Rows[i]["CLI_NIT"].ToString();
                       obj.CLI_codtipocliente = Convert.ToInt32(dt.Rows[i]["CLI_CODTIPOCLI"]);
                       obj.CLI_estado = Convert.ToInt32(dt.Rows[i]["CLI_CODESTADO"]);
                   }

                   return obj;


               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }



            /*Título: SEL_ESTCLIENTE
         Tipo: funcion
         Variables: 
             
         CLI_estado 
         CLI_estadonombre
                      
         Resumen:funcion que hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_ESTCLIENTE" en la  Base de Datos, 
         se muestra lista con tipos de estado del cliente.
         Retorno: lista con tipos de estado del cliente
         Autor: Sofia Rodriguez 
         Fecha: 13/07/13*/

            /// <summary>
            /// Ses the l_ estcliente.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <returns>List{MOD_Clientes}.</returns>
            public List<MOD_Clientes> SEL_ESTCLIENTE(SqlCommand comando)
            {
                try
                {
                    string sp = "SP_SEL_ESTCLIENTE";

                    comando.CommandType = CommandType.StoredProcedure;
                    comando.CommandText = sp;
                    comando.Parameters.Clear();

                    IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    DataTable dt = ds.Tables[0];
                    List<MOD_Clientes> lista = new List<MOD_Clientes>();

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        MOD_Clientes obj = new MOD_Clientes();
                        obj.CLI_estado = Convert.ToInt32(dt.Rows[i]["ESTCLI_CODESTADO"]);
                        obj.CLI_estadonombre = dt.Rows[i]["ESTCLI_NOMBRE"].ToString();


                        lista.Add(obj);
                    }


                    return lista;

                }
                catch (Exception exc)
                {
                    throw exc;
                }
            }

            /*Título: SEL_TIPO_CLIENTE
      Tipo: funcion
      Variables: 
             
      CLI_codtipocliente
      CLI_nombretipocliente
                      
      Resumen:funcion que hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_TIPO_CLIENTE" en la  Base de Datos, 
      se muestra  lista con tipos de cliente existentes.
      Retorno: lista con tipos de cliente existentes.
      Autor: Sofia Rodriguez 
      Fecha: 13/07/13*/

            /// <summary>
            /// Ses the l_ tip o_ cliente.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <returns>List{MOD_Clientes}.</returns>
            public List<MOD_Clientes> SEL_TIPO_CLIENTE(SqlCommand comando)
           {
               try
               {
                   string sp = "SP_SEL_TIPO_CLIENTE";

                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();

                   IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                   DataSet ds = new DataSet();
                   da.Fill(ds);

                   DataTable dt = ds.Tables[0];
                   List<MOD_Clientes> lista = new List<MOD_Clientes>();

                   for (int i = 0; i < dt.Rows.Count; i++)
                   {
                       MOD_Clientes obj = new MOD_Clientes();
                       obj.CLI_codtipocliente = Convert.ToInt32(dt.Rows[i]["TIPCLI_CODTIPOCLI"]);
                       obj.CLI_nombretipocliente = dt.Rows[i]["TIPCLI_NOMBRE"].ToString();


                       lista.Add(obj);
                   }


                   return lista;

               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }


            /*Título: SEL_ClienteByNIT
   Tipo: funcion
   Variables: 
             
   CLI_NIT
                      
   Resumen:funcion que hace llamado y ejecucion de Procedimiento Almacenado "SP_SEL_ClienteByNIT" en la  Base de Datos, 
   cuenta si existe mas de un cliente con el mismo numero de NIT 
   Retorno:cantidad de clientes con el mismo NIT.
   Autor: Sofia Rodriguez 
   Fecha: 13/07/13*/

            /// <summary>
            /// Ses the l_ cliente by nit.
            /// </summary>
            /// <param name="comando">The comando.</param>
            /// <param name="CLI_NIT">The cl i_ nit.</param>
            /// <returns>System.Int32.</returns>
            public int SEL_ClienteByNIT(SqlCommand comando, string CLI_NIT)
           {
               try
               {
                   string sp = "SP_SEL_ClienteByNIT";
                   int cant_cli = 0;
                   comando.CommandType = CommandType.StoredProcedure;
                   comando.CommandText = sp;
                   comando.Parameters.Clear();

                   comando.Parameters.Add(new SqlParameter("@CLI_NIT", SqlDbType.VarChar));


                   comando.Parameters[0].Value = CLI_NIT;
                   

                   IDbDataAdapter da = new SqlDataAdapter((SqlCommand)comando);
                   DataSet ds = new DataSet();
                   da.Fill(ds);

                   DataTable dt = ds.Tables[0];
                   MOD_Clientes obj = new MOD_Clientes();

                   for (int i = 0; i < dt.Rows.Count; i++)
                   {
                       cant_cli = Convert.ToInt32(dt.Rows[i]["CLI_CANT"]);


                   }

                   return cant_cli;


               }
               catch (Exception exc)
               {
                   throw exc;
               }
           }

        }
}
